/**
 * 
 */
package co.edu.uniquindio.pruebas;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import co.edu.uniquindio.dao.PaisDao;
import co.edu.uniquindio.dao.PersonaDao;
import co.edu.uniquindio.logica.Pais;
import co.edu.uniquindio.logica.Persona;

/**
 * 
 * Prueba implementation class for: PruebaPersona
 * El proposito de esta clase es el probar  la
 * DAO relacionada con la informacion de una persona.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
public class PruebaPersona {

	/**
	 * contenedor en el cual se manejara la instancia del EJB que 
	 * maneja los datos que se utilizaran para la prueba
	 */
	private EJBContainer contenedor;
	/**
	 * este atributo es un instancia de la clase PersonaDao
	 */
	private PersonaDao personaDao;
	/**
	 * metodo de la clase PruebaPersona el cual 
	 * configura las condiciones iniciales para hacer la prueba.
	 */
	@Before
	public void configurar()
	{
		Map<String,String> properties = new HashMap<String,String>();
		properties.put(EJBContainer.APP_NAME, "Subasta");
		System.out.println(EJBContainer.APP_NAME);
		contenedor = EJBContainer.createEJBContainer(properties);
	}
	/**
	 * este metodo es para regresar a todas las condiciones iniciales
	 * antes de la prueba a excepcion de lo incertado en la BD que se hace
	 * al cerrar el contenedor en el cual se encapsula la instancia del EJB
	 * 
	 */
	@After
	public void terminar()
	{
		contenedor.close();
	}
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de la DAO pertinente relacionada a la persona para despues verificar
	 * los datos obtenidos atravez de la misma DAO. 
	 * @throws NamingException
	 */
	@Test
	public void testCrudPersona() throws NamingException 
	{
		PaisDao paisDao=(PaisDao)contenedor.getContext().lookup("java:global/Subasta/PaisDao");
		Pais pais=paisDao.findByKey("colombia");
		//paisDao.insert(pais);

		personaDao=(PersonaDao)contenedor.getContext().lookup("java:global/Subasta/PersonaDao");

		Persona persona= new Persona("1094920","der@hot","andres",pais,"lukas","payasotriste");

		//prueba insert
		//personaDao.insert(persona);
		Assert.assertEquals("1094920",persona.getCedula());

		//Prueba de búsqueda
		Persona personaRecuperad=personaDao.findByKey(persona.getCedula());
		Assert.assertEquals(personaRecuperad.getCedula(), persona.getCedula());    	

		//Prueba actualización
		personaRecuperad.setCedula("19467");
		personaRecuperad.setNombre("Alberto");
		personaRecuperad.setCorreo("qwert@hotmail");
		personaRecuperad.setAlias("lola");
		personaDao.update(personaRecuperad);
		persona=personaDao.findByKey(personaRecuperad.getCedula());
		Assert.assertEquals("19467",persona.getCedula());

		//Prueba getAll
		Persona otraPersona= new Persona("239876","asfg@hot","maicol",pais,"pablo","moco");
		//personaDao.insert(otraPersona);
		List<Persona>personas=personaDao.getAll();
		Assert.assertTrue(personas.contains(otraPersona));
		Assert.assertTrue(personas.contains(persona));    	

//		//Prueba delete
//		personaDao.remove(otraPersona);
//		personaDao.remove(persona);
//		personas=personaDao.getAll();
//		Assert.assertTrue(!personas.contains(otraPersona));
//		Assert.assertTrue(!personas.contains(persona));    	

        Persona per= personaDao.obtenerPorContrasenia("moco","pablo");
        System.out.println(per.getNombre());
        Assert.assertEquals("239876", per.getCedula());
        


	}

}
